草庐IT

Pythonic 宏语法

全部标签

oop - 这是 isinstance pythonic/"good"的使用吗?

this的副作用问题是我被引导到thispost,其中指出:Wheneverisinstanceisused,controlflowforks;onetypeofobjectgoesdownonecodepath,andothertypesofobjectgodowntheother---eveniftheyimplementthesameinterface!并暗示这是一件坏事。但是,我以前使用过这样的代码,我认为这是面向对象的方式。类似于以下内容:classMyTime(object):def__init__(self,h=0,m=0,s=0):self.h=0self.m=0sel

python - Pylons 中具有自动加载(反射)功能的 SQLAlchemy 声明性语法

我想使用自动加载来使用现有数据库。我知道如何在没有声明语法的情况下做到这一点(model/_init_.py):definit_model(engine):"""Callmebeforeusinganyofthetablesorclassesinthemodel"""t_events=Table('events',Base.metadata,schema='events',autoload=True,autoload_with=engine)orm.mapper(Event,t_events)Session.configure(bind=engine)classEvent(object

python - multiprocessing.value 清晰的语法?

我想使用multiprocessing.Value在多个进程中使用一个变量,但是Python文档中的语法不清楚。谁能告诉我应该使用什么类型(我的变量是一个字母),以及在哪里放置我的变量名?编辑我尝试使用Manager在进程之间共享我的信件。但我现在唯一拥有的是Value('ctypes.c_char_p','(Thekeyyouhithere)')在PythonShell中打印,但仍然没有声音。使用管理器时,控制台似乎也比平时慢了一点。从我按下按键到Value出现在屏幕上之间有将近一秒的延迟。我的代码现在看起来像这样:#Importfromtkinterimport*importwav

python - 使用 Python ast 模块访问语法树中的节点

我正在玩pythonast(抽象语法树)。我写了下面的代码,它访问了AST的所有节点。importastclassPy2Neko(ast.NodeVisitor):defgeneric_visit(self,node):printtype(node).__name__ast.NodeVisitor.generic_visit(self,node)defvisit_Name(self,node):print'Name:',node.iddefvisit_Num(self,node):print'Num:',node.__dict__['n']defvisit_Str(self,node)

Python 3.5 类型化的 NamedTuple 语法产生 SyntaxError

当我尝试新类型的namedtuple语法时,我得到一个SyntaxError:invalidsyntax错误:classEmployee(NamedTuple):name:strid:int在Python3.5.2中,即使根据thedocumentation它应该从3.5+开始有效。我错过了什么吗?我在代码中通过typing导入了NamedTuple。 最佳答案 声明您正在使用的name和id字段类型的语法需要Python3.6orup.Python3.5不支持所需的变量级类型提示。来自typing.NamedTupledocume

namedtuple 中 namedtuple 的 Python 语法

是否可以在另一个namedtuple中包含一个namedtuple?例如:fromcollectionsimportnamedtuplePosition=namedtuple('Position','xy')Token=namedtuple('Token',['key','value',Position])它给出一个“ValueError:类型名称和字段名称必须是有效的标识符”此外,我很好奇是否有更Pythonic的方法来构建这样的嵌套容器? 最佳答案 您混淆了两个概念-namedtuple的结构和分配给它们的值。结构需要唯一名称列

在列表理解中使用第二个条件的 Pythonic 方式

让我们假设以下函数:defmyfun(my_list,n,par1=''):ifpar1=='':new_list=[[my_fun2(i,j)forjinrange(n)]foriinrange(n)]else:new_list=[[my_fun2(i,j)forjinrange(n)]foriinrange(n)ifmy_fun2(i,n)==par1]returnnew_list如您所见,根据par1,有两种不同的场景。我不喜欢第3行和第5行几乎相同并且不遵循DRY(不要重复自己)原则。如何改进此代码? 最佳答案 这可能有效:

python - 使用迭代器的最快(最 Pythonic)方式

我很好奇使用迭代器最快的方式是什么,并且是最Pythonic的方式。例如,假设我想用map内置函数创建一个迭代器,它会累积一些东西作为副作用。我实际上并不关心map的结果,只关心副作用,所以我想以尽可能少的开销或样板来完成迭代。像这样的东西:my_set=set()my_map=map(lambdax,y:my_set.add((x,y)),my_x,my_y)在这个例子中,我只是想通过迭代器来积累my_set中的东西,而my_set只是一个空集,直到我真正运行我的map。像这样的东西:for_inmy_map:pass或裸体[_for_inmy_map]有效,但它们都感觉笨拙。是否有

python - 一种更 pythonic 的迭代列表的方式,同时在每次迭代中排除一个元素

我有以下代码:items=["one","two","three"]foriinrange(0,len(items)):forindex,elementinenumerate(items):ifindex!=i:#dosomethingwithelement基本上我想排除每个元素一次并迭代其余部分。因此,对于上面的列表,我想要以下迭代:“二”、“三”“一”、“三”“一”、“二”我现在写的代码有点像C++,有没有更好的解决方案?(我不想将所有可能的列表保存在一个变量中)编辑:我没有说明这一点,但列表大小不一定是3。它可以是任何大小。编辑2:似乎还有另一个误解:如果我有N个列表,那么我想要

python - 语法错误 "no viable alternative at input ' self '”

我有一个包含以下代码的gui.py文件:fromjavax.swingimportJFrame,JPanel,Box,JComboBox,JSpinner,JButton,JLabel,SpinnerNumberModel,WindowConstantsfromjava.awtimportBoxLayout,GridLayoutclassSettingsWindow:defstart(self):selected=self.combobox.selectedIndexifselected>=0:self.map=self.map_list[selected]self.games=sel